import request from '../../utils/request';

const STORE_KEY = 'enum_store'
let enumStore = {
}
function getEnumArray(enumName, forceReload) {
    let enumData = {};
    if (forceReload || !enumStore.hasOwnProperty(enumName)) {
      request({
        url: '/sys/enums/'+enumName,
        method: 'get',
        data: {}
      }).then(res=>{
        let data = {};
        data[enumName] = res.data;
        setSessionStore(data);
      });
    }
  //输出克隆值
  if(enumStore[enumName] && enumStore[enumName] !== undefined){
    enumData = JSON.parse(JSON.stringify(enumStore[enumName]))
  }
  return enumData
}

async function getEnumArrayPlus(packagePath,enumName, forceReload) {
  if (forceReload || !enumStore.hasOwnProperty(enumName)) {
    // WARNING: 此处获取枚举数据的请求方法是同步的，会阻塞线程，影响用户体验
    // 但又不好改成异步，可能配合 directive 可以做到？
    await request({
      url: '/sys/enums/getBaseEnumPlus',
      method: 'post',
      data: {enumType: enumName,packagePath: packagePath}
    }).then(res=>{
      let data = {};
      data[enumName] = res.data;
      setSessionStore(data);
    });
    // let response = syncPost("/sys/enums/getBaseEnumPlus", {enumType: enumName,packagePath: packagePath});
    // let data = {};
    // data[enumName] = response.bizContent;
    // setSessionStore(data);
  }
  //输出克隆值
  return JSON.parse(JSON.stringify(enumStore[enumName]))
}

function setSessionStore(param) {
  enumStore = Object.assign(enumStore, param)
  sessionStorage.setItem(STORE_KEY, JSON.stringify(enumStore))
}

function getSessionStore() {
  return JSON.parse(sessionStorage.getItem(STORE_KEY))
}

(async function () {
  enumStore = Object.assign({}, enumStore, getSessionStore())
  // 如果缓存没数据的时候加载全部
  // if (Object.getOwnPropertyNames(enumStore).length === 0) {
  //   try {
  //     let response = await post(path.getAllEnum, {})
  //     setSessionStore(response.data)
  //   } catch (e) {
  //     console.error('获取枚举字典失败')
  //   }
  // }
})()

export default {
  getDesc(enumName, value) {
    let dict = getEnumArray(enumName).find(item => {
      return item.val == value
    })
    return dict.desc
  },
  getVal(enumName, desc) {
    return getEnumArray(enumName).find(item => {
      return item.desc === desc
    }).val
  },
  getEnumArray(enumName) {
    return getEnumArray(enumName)
  },
  getEnumArrayPlus(packagePath,enumName) {
    return getEnumArrayPlus(packagePath,enumName)
  },
  getAllEnum() {
    return JSON.parse(JSON.stringify(enumStore))
  }
}
